/// 计算字符串的djb2哈希值（区分大小写）
///
/// # 参数
/// - `s`: 待哈希的输入字符串
///
/// # 返回值
/// 32位无符号哈希值
pub fn string_hash(s: &str) -> u32 {
    s.bytes().fold(5381, |hash, c| {
        hash.wrapping_shl(5).wrapping_add(hash).wrapping_add(c as u32)
    })
}

/// 计算字符串的djb2哈希值（不区分大小写）
///
/// # 参数
/// - `s`: 待哈希的输入字符串
///
/// # 返回值
/// 32位无符号哈希值
pub fn string_nocase_hash(s: &str) -> u32 {
    s.bytes().fold(5381, |hash, c| {
        let lower_c = c.to_ascii_lowercase();
        hash.wrapping_shl(5).wrapping_add(hash).wrapping_add(lower_c as u32)
    })
}
